//
// Created by eddy on 24-3-14.
//
#include "iostream"

namespace first {
    static std::string Name = "lili";

    // 命名空间可以嵌套
    namespace son {
        int Age = 10;
    }
}

namespace second {
    static std::string Name = "eddy";
}
// 命名空间可以随时追加,按顺序执行
namespace second {
    int age = 50;
}

int main() {

    // 使用独立命名空间输出重名变量
    std::cout << first::Name << std::endl;
    // 使用嵌套的属性
    std::cout << first::son::Age << std::endl;
    std::cout << second::age << std::endl;
    // 以下将出现错误！
    // std::cout<<second::addr<<std::endl;

    // 可以使用using关键字
    using namespace first;
    // using namespace second;
    std::cout << Name << std::endl;     // 将使用first的变量

    // todo 注意事项：
    // todo 1.  当本空间有重名的变量，则默认使用当前命名空间的值
//    std::string Name = "laowang";
    std::cout << Name << std::endl;     // 会使用上一行的Name，想使用命名空间的变量，则需要如下一行使用。
    std::cout << first::Name << std::endl;

    // todo 2. 当using两个命名空间存在相同变量名，并且当前空间没有变量定义，则还需要使用first::Name的方式
    return 0;
}

namespace second {
    std::string addr = "china";
}